/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ChoixModele.java
 *
 * Created on 7 avr. 2010, 15:54:26
 */

package vue;

import controleur.CCLogger;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import modele.*;

import java.awt.GridLayout;
import java.awt.event.MouseListener;
import java.util.Vector;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import main.Outils;
import modele.ModeleCarte;
import vue.composants.EcranModeleCPD;

/**
 *
 * @author Synapse
 */
public class EcranModele extends Ecran implements MouseListener {

    // Pour représenter les modèles
    private Vector<EcranModeleCPD> modeleCarteDrawers = new Vector<EcranModeleCPD>();

    // Modèle selectionné
    private ModeleCarte modeleSelectionne;

    
    /**
     * Constructeur de la classe EcranModele.
     * @param mere  FenetreMere
     * @see FenetreMere
     */
    public EcranModele(FenetreMere mere) {
        super(mere);
        initComponents();

        try
        {
            // On créer un MCD pour chaque modèle existant
            Dimension dim = new Dimension(300, 224);
            Vector<ModeleCarte> modeles = ressources.getModeles();
            for(int i=0; i < modeles.size(); i++) {
                CartePostale cartePostale = new CartePostale(modeles.get(i));
                modeleCarteDrawers.add( new EcranModeleCPD(ressources, cartePostale, "modele", dim, this));
            }

            // Grille pour placer les drawers
            int nbColonnes = 3;
            int nbLigneNecessaire = (modeleCarteDrawers.size()/nbColonnes) + (modeleCarteDrawers.size()%nbColonnes);
            GridLayout grillePositionnement = new GridLayout(nbLigneNecessaire, nbColonnes, 10, 10);
            panelModeles.setLayout( grillePositionnement );

            // On ajoute tous les drawers à la grille
            for(int i=0; i < modeleCarteDrawers.size(); i++)
                panelModeles.add( modeleCarteDrawers.get(i) );

            // Initialisation
            initialiser();
        }
        catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            this.afficherMessageErreur("Une erreur est survenue lors de l'initialison de l'écran Modèle.");
        }
    }

    /**
     * Initialise l'écran.
     */
    public void initialiser() {

        // Aucun modèle selectionné
        modeleSelectionne = null;

        // Aucun modèle en surbrillance
        for (EcranModeleCPD emcd : modeleCarteDrawers)
            emcd.setSelectionne(false);

        // Bouton suivant grisé
        btnSuivant.setEnabled(false);
    }

    /**
     * L'écran écoute chaque clic sur chacun des ModelesCarteDrawer.
     * Cela sert à déterminer lequel est selectionné.
     *
     * @param e Evennement
     */
    public void mouseClicked(MouseEvent e) {
        try
        {
            // On cherche l'index du modèle qui a envoyé l'évennement
            for(int i=0; i < modeleCarteDrawers.size(); i++) {

                EcranModeleCPD emcd = modeleCarteDrawers.get(i);

                // Si l'origine de l'évennement est le MCD courant
                if( emcd == e.getSource() ) {

                    // On enregistre le modele concerné
                    modeleSelectionne = emcd.getCartePostale().getModele();

                    // On peut passer à l'écran suivant
                    btnSuivant.setEnabled(true);

                    // On met à jour l'affichage
                    for(int j=0; j < modeleCarteDrawers.size(); j++)
                        modeleCarteDrawers.get(j).setSelectionne( i==j );
                    panelModeles.repaint();
                }
            }
        }
        catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, ex.getStackTrace().toString());
            this.afficherMessageErreur(ex.getMessage());
        }

    }
    public void mousePressed(MouseEvent e) { }
    public void mouseReleased(MouseEvent e) { }
    public void mouseEntered(MouseEvent e) { }
    public void mouseExited(MouseEvent e) { }

    /**
     * Permet au controlleur de récupérer le modèle qu'à choisit l'utilisateur dans cet écran.
     *
     * @return Le modèle selectionné par l'utilisateur, null si aucune selection.
     */
    public ModeleCarte getModeleSelectionne() {
        return modeleSelectionne;
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        labBandeau = new javax.swing.JLabel();
        btnPrecedent = new javax.swing.JButton();
        btnRecommencer = new javax.swing.JButton();
        btnSuivant = new javax.swing.JButton();
        labIndication = new javax.swing.JLabel();
        scrollPane = new javax.swing.JScrollPane();
        panelModeles = new javax.swing.JPanel();

        setBackground(new java.awt.Color(255, 255, 255));
        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 204, 255), 2));
        setMaximumSize(new java.awt.Dimension(1024, 768));
        setMinimumSize(new java.awt.Dimension(1024, 768));
        setName("Modele"); // NOI18N
        setPreferredSize(new java.awt.Dimension(1024, 768));

        labBandeau.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vue/images/choixmodele.png"))); // NOI18N
        labBandeau.setMaximumSize(new java.awt.Dimension(1024, 88));
        labBandeau.setMinimumSize(new java.awt.Dimension(1024, 88));
        labBandeau.setPreferredSize(new java.awt.Dimension(1024, 88));

        btnPrecedent.setFont(new java.awt.Font("Tahoma", 0, 18));
        btnPrecedent.setText("< Précédent");
        btnPrecedent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPrecedentActionPerformed(evt);
            }
        });

        btnRecommencer.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        btnRecommencer.setText("Recommencer");
        btnRecommencer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRecommencerActionPerformed(evt);
            }
        });

        btnSuivant.setFont(new java.awt.Font("Tahoma", 0, 18));
        btnSuivant.setText("Suivant >");
        btnSuivant.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSuivantActionPerformed(evt);
            }
        });

        labIndication.setFont(new java.awt.Font("Tahoma", 0, 18));
        labIndication.setText("Choisissez votre modèle de carte postale:");

        javax.swing.GroupLayout panelModelesLayout = new javax.swing.GroupLayout(panelModeles);
        panelModeles.setLayout(panelModelesLayout);
        panelModelesLayout.setHorizontalGroup(
            panelModelesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 1002, Short.MAX_VALUE)
        );
        panelModelesLayout.setVerticalGroup(
            panelModelesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 551, Short.MAX_VALUE)
        );

        scrollPane.setViewportView(panelModeles);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnPrecedent, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(199, 199, 199)
                .addComponent(btnRecommencer, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 201, Short.MAX_VALUE)
                .addComponent(btnSuivant, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addComponent(labBandeau, javax.swing.GroupLayout.DEFAULT_SIZE, 1024, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labIndication)
                .addContainerGap(686, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1000, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(labBandeau, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(labIndication)
                .addGap(18, 18, 18)
                .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 551, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnPrecedent, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnSuivant, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnRecommencer, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Ecouteur pour le bouton "Précédent".
     * Indique au controleur que l'utilisateur souhaite revenir sur l'écran précédent
     * Pas de retour.
     * @param evt java.awt.event.ActionEvent
     */
    private void btnPrecedentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrecedentActionPerformed
        controleur.trModelePrecedent();
}//GEN-LAST:event_btnPrecedentActionPerformed

    /**
     * Ecouteur pour le bouton "Recommencer".
     * Indique au controleur que l'utilisateur souhaite recommencer
     * Pas de retour.
     * @param evt java.awt.event.ActionEvent
     */
    private void btnRecommencerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRecommencerActionPerformed
        this.trClicSurRecommencer();
}//GEN-LAST:event_btnRecommencerActionPerformed

    /**
     * Ecouteur pour le bouton "Suivant".
     * Indique au controleur que l'utilisateur souhaite revenir sur l'écran suivant
     * Pas de retour.
     * @param evt java.awt.event.ActionEvent
     */
    private void btnSuivantActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSuivantActionPerformed
        try {
            controleur.trModeleSuivant();
        }
        catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, ex.getStackTrace().toString());
            this.afficherMessageErreur("Aucun modèle sélectionné");
        }
}//GEN-LAST:event_btnSuivantActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnPrecedent;
    private javax.swing.JButton btnRecommencer;
    private javax.swing.JButton btnSuivant;
    private javax.swing.JLabel labBandeau;
    private javax.swing.JLabel labIndication;
    private javax.swing.JPanel panelModeles;
    private javax.swing.JScrollPane scrollPane;
    // End of variables declaration//GEN-END:variables


}
